﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using PMQLCHH.BUS;
using PMQLCHH.DAO;
using PMQLCHH.DTO; 

namespace PMQLCHH.GUI
{
    //ĐÃ HOÀN THÀNH - LÂM CHƯƠNG TRƯỜNG THỊNH
    public partial class TRAHANG : DevComponents.DotNetBar.Office2007Form
    {
        int KTCapNhat;
        public TRAHANG()
        {

            InitializeComponent();
            //Tổng tiền = 0
            txt_TongSLGui.Text = "0";
            // Kiềm tra sau mỗi lần thay đổi thông tin
            // 0 : thông tin đã có thay đôi
            // 1 : thông tin không thay đổi
            // 2: khởi tạo giá trị 2, chưa nhập thông tin gì hết
            KTCapNhat = 2;
            // Load danh sách mã mặt hàng vô combobox mã mặt hàng trong datagridview
            DataGridViewComboBoxColumn cbx_MaMatHang = new DataGridViewComboBoxColumn();
            cbx_MaMatHang = (DataGridViewComboBoxColumn)dtg_DanhSachMatHang.Columns[1];
            foreach (DataRow row in NhapHangBUS.LoadMaMatHang().Rows)
            {
                cbx_MaMatHang.Items.Add(row["MaMatHang"].ToString());
            }
            // Load danh sách TÊN nhà cung câp vô combobox TÊN nhà cung cấp
            foreach (DataRow row in GoiHangBUS.LoadTatCaNhaCungCap().Rows)
            {
                ComboboxItem1 item = new ComboboxItem1();
                item.Value = row["MaNhaCungCap"].ToString();
                item.Text = row["TenNhaCungCap"].ToString();
                cbx_TenNCC.Items.Add(item);
            }

        }
        public class ComboboxItem1
        {
            // text: tên ncc
            // value: mã ncc
            public string Text { get; set; }
            public object Value { get; set; }

            public override string ToString()
            {
                return Text;
            }
        }

        private void btnTimNCC_Click(object sender, EventArgs e)
        {
            //NhaCungCap ncc = new NhaCungCap();
            this.Hide();
            NhaCungCap ncc = new NhaCungCap(true);
            ncc.MyGetData = new NhaCungCap.GetString(GetValue);
            ncc.Show();
        }
        public void GetValue(String MyString1, String MyString2, String MyString3, String MyString4)
        {
            cbx_TenNCC.Text = MyString1;
            txt_DC.Text = MyString2;
            txt_DienThoai.Text = MyString3;
            //ComboboxItem1 item = new ComboboxItem1();
            //// text: tên ncc
            //// value: mã ncc
            //item.Text = MyString1;
            //item.Value = MyString4;
            //cbx_TenNhaCungCap.Items.Add(item);
        }

        private void btn_LamMoi_Click(object sender, EventArgs e)
        {
            txt_DC.Text = "";
            cbx_TenNCC.SelectedItem = null;
            txt_DienThoai.Text = "";
            txt_TongSLGui.Text = "0";
            dtg_DanhSachMatHang.RowCount = 1;
            dtg_DanhSachMatHang.Rows[0].Cells[0].Value = null;
        }

        private void btn_Thoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void dtg_DanhSachMatHang_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            //Thong tin thay đổi KTCapNhat=0
            KTCapNhat = 0;
        }

        private void cbx_TenNCC_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Thong tin thay đổi KTCapNhat=0
            KTCapNhat = 0;
            if (cbx_TenNCC.SelectedItem != null)
            {
                //Load tên , địa chỉ, số điện thoại nhà cung cấp theo TÊN nhà cung cấp
                foreach (DataRow row in NhapHangBUS.LoadNhaCungCapTheoTenNhaCungCap(cbx_TenNCC.SelectedItem.ToString()).Rows)
                {
                    txt_DC.Text = row["DiaChi"].ToString();
                    txt_DienThoai.Text = row["SoDienThoai"].ToString();
                }
            }
        }

        private void dtg_DanhSachMatHang_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            int dong = e.RowIndex;
            // Nếu đã chọn mã mặt hàng thì load vô ô tên, loại, đơn vị tính theo mã mặt hàng
            if (dtg_DanhSachMatHang.Rows[dong].Cells[1].Value != null)
            {
                string mamh = dtg_DanhSachMatHang.Rows[dong].Cells[1].Value.ToString();
                foreach (DataRow row in NhapHangBUS.LoadMatHangTheoMaMatHang(mamh).Rows)
                {
                    dtg_DanhSachMatHang.Rows[dong].Cells[2].Value = row["TenMatHang"].ToString();
                    dtg_DanhSachMatHang.Rows[dong].Cells[3].Value = row["TenLoaiMatHang"].ToString();
                    dtg_DanhSachMatHang.Rows[dong].Cells[4].Value = row["TenDonVi"].ToString();
                }

            }

        }
        private bool KiemTraPhieuNhap()
        {
            //Mặc định đã điền đủ thông tin
            bool kq = true;
            //Nếu chưa chọn nhà cung cấp kq=false
            if (cbx_TenNCC.SelectedItem == null)
            {
                kq = false;
            }
            //Nếu chưa có mặt hàng kq=false
            if (dtg_DanhSachMatHang.Rows.Count == 1)
            {
                kq = false;
            }
            for (int i = 0; i < dtg_DanhSachMatHang.Rows.Count - 1; i++)
            {
                //Chưa chọn mặt hàng kq=false
                if (dtg_DanhSachMatHang.Rows[i].Cells[1].Value == null)
                    kq = false;
                //Chưa điền số lượng kq=false
                if (dtg_DanhSachMatHang.Rows[i].Cells[5].Value == null)
                    kq = false;
            }
            return kq;

        }
        private void btn_CapNhat_Click(object sender, EventArgs e)
        {
            //Kiển tra xem đã điền đầy đủ thông tin chưa? Nếu đủ sẽ tiến hành cập nhật
            //các dòng chọn xóa sẽ được xóa
            //ngược lại sẽ tính sồ lượng và cộng dồn để tính tổng số lượng gửi 
            if (KiemTraPhieuNhap() == true)
            {
                //Gán giá trị kiểm tra cập nhật là 1
                KTCapNhat = 1;
                int TongSLGui = 0;
                //flagktsptrung này kiểm tra sản phẩm có trùng nhau không
                //mặc định các sản phẩm ko trùng ta gán = 1
                int flagktsptrung = 1;
                //chạy lần lượt qua danh sách mặt hàng
                for (int i = dtg_DanhSachMatHang.Rows.Count - 2; i >= 0; i--)
                {
                    int SoLuong = 0;
                    //Nếu đã tác động vô ô checkbox
                    if (dtg_DanhSachMatHang.Rows[i].Cells[0].Value != null)
                    {

                        //Nếu ô check box trống(chọn No)
                        //Gán Sồ Lượng là giá trị ô số lượng
                        if (dtg_DanhSachMatHang.Rows[i].Cells[0].Value.ToString() == "N")
                        {
                            //flag này kiểm tra sản phẩm có trùng nhau không
                            //mặc định các sản phẩm ko trùng ta gán = 1
                            int flag = 1;
                            //dòng for kiểm tra trùng
                            for (int j = i - 1; j >= 0; j--)
                            {
                                //điều kiện trong ds mặt hàng 2 sản phẩm trùng nhau
                                if (dtg_DanhSachMatHang.Rows[j].Cells[1].Value.ToString() == dtg_DanhSachMatHang.Rows[i].Cells[1].Value.ToString())
                                {
                                    flag = 0;
                                    flagktsptrung = 0;
                                }
                            }
                            //nếu không trùng ta gán số lượng
                            if (flag == 1)
                            {
                                string ChuoiDaChuanHoa = chuanHoaXau(dtg_DanhSachMatHang.Rows[i].Cells[5].Value.ToString());
                                SoLuong = int.Parse(ChuoiDaChuanHoa);
                            }
                            //trùng xuất thông báo và gán giá trị ktcapnhat=0
                            //vì có trùng nên không cho cập nhật
                            else
                            {
                                KTCapNhat = 0;
                                MessageBox.Show("Có 2 sản phẩm trùng nhau, sẽ tự động xóa và giữ lại 1");
                                dtg_DanhSachMatHang.Rows.RemoveAt(i);
                            }
                        }
                        //Ngược lại(chọn yes)
                        //Xóa dòng đó
                        else
                        {
                            dtg_DanhSachMatHang.Rows.RemoveAt(i);
                        }
                    }
                    //Nếu chưa tác động vô checkbox ta sẽ hiểu người dùng không có ý định xóa
                    //Gán số lượng là giá trị ô số lượng
                    else
                    {
                        int flag = 1;
                        //dòng for kiểm tra trùng
                        for (int j = i - 1; j >= 0; j--)
                        {
                            //điều kiện trong ds mặt hàng 2 sản phẩm trùng nhau
                            if (dtg_DanhSachMatHang.Rows[j].Cells[1].Value.ToString() == dtg_DanhSachMatHang.Rows[i].Cells[1].Value.ToString())
                            {
                                flag = 0;
                                flagktsptrung = 0;
                            }
                        }
                        //nếu không trùng ta gán số lượng
                        if (flag == 1)
                        {
                            string ChuoiDaChuanHoa = chuanHoaXau(dtg_DanhSachMatHang.Rows[i].Cells[5].Value.ToString());
                            SoLuong = int.Parse(ChuoiDaChuanHoa);
                        }
                        //trùng xuất thông báo và gán giá trị ktcapnhat=0
                        //vì có trùng nên không cho cập nhật
                        else
                        {
                            KTCapNhat = 0;
                            MessageBox.Show("Có 2 sản phẩm trùng nhau, sẽ tự động xóa và giữ lại 1");
                            dtg_DanhSachMatHang.Rows.RemoveAt(i);
                        }
                    }
                    //Cuối mỗi lần lặp cộng dồn Tổng số lượng
                    TongSLGui += SoLuong;
                }
                //trùng sản phẩm ta gán tổng số lượng sp gửi = 0
                if (flagktsptrung == 0)
                    TongSLGui = 0;
                txt_TongSLGui.Text = TongSLGui.ToString();
            }
            //Thông tin chưa được điền đủ, xuất thông báo nói người dùng điền vô
            else
            {
                MessageBox.Show("Xin Nhâp Đầy Đủ Thông Tin");
            }
        }

        private void btn_GuiHang_Click(object sender, EventArgs e)
        {
            //thong tin đã có thay đổi nên trước khi nhập hàng phải cập nhật trước
            if (KTCapNhat == 0)
            {
                MessageBox.Show("Xin vui lòng click vô cập nhật vì thông tin đã thay đổi");
            }
            else
            {
                //Nếu form mới show lên người dùng chưa điền gì hết
                //xuất thông báo điền thông tin
                if (KTCapNhat == 2)
                {
                    MessageBox.Show("Vui lòng điền thông tin");
                }
                //Nếu tổng tiền = 0(chưa có mặt hàng nào, không cho gửi hàng)
                if (txt_TongSLGui.Text == "0")
                {
                    MessageBox.Show("Chưa có mặt hàng nào");
                }
                if (KTCapNhat == 1 && txt_TongSLGui.Text != "0")
                {
                    string str_chuoithongbao = "";
                    for (int i = dtg_DanhSachMatHang.Rows.Count - 2; i >= 0; i--)
                    {
                             MatHangDTO mh = new MatHangDTO();
                             mh.MaMatHang = dtg_DanhSachMatHang.Rows[i].Cells[1].Value.ToString();
                             int slt = GoiHangBUS.LaySoLuongTonTheoMaMH(mh);
                             if (slt < int.Parse(dtg_DanhSachMatHang.Rows[i].Cells[5].Value.ToString()))
                             {
                                 str_chuoithongbao += dtg_DanhSachMatHang.Rows[i].Cells[2].Value.ToString();
                                 str_chuoithongbao += " còn " + slt.ToString();
                                 str_chuoithongbao += "\n";
                             }
                    }
                    if (str_chuoithongbao == "")
                    {
                        PhieuGoiHangDTO pg = new PhieuGoiHangDTO();
                        pg.MaPhieuGoi = GoiHangBUS.GetMaPhieuGoi();
                        ComboboxItem1 item = new ComboboxItem1();
                        item = (ComboboxItem1)cbx_TenNCC.SelectedItem;
                        pg.MaNhaCungCap = item.Value.ToString();
                        int TongSL = 0;
                        for (int i = dtg_DanhSachMatHang.Rows.Count - 2; i >= 0; i--)
                        {
                            TongSL += int.Parse(dtg_DanhSachMatHang.Rows[i].Cells[5].Value.ToString());
                        }
                        pg.TongSoLuongTra = TongSL;
                        pg.TrangThai = 0;
                        GoiHangBUS.insertTablePhieuTra(pg);
                        //Đã sửa lại ở chỗ này 
                        //Đã sữa lại lần 2, sau khi cập nhật lên trạng thái đã duyệt mới update table mathang
                        for (int i = dtg_DanhSachMatHang.Rows.Count - 2; i >= 0; i--)
                        {
                            ChiTietPhieuGoiHangDTO ctpg = new ChiTietPhieuGoiHangDTO();
                            ctpg.MaPhieuGoi = pg.MaPhieuGoi;
                            ctpg.MaMatHang = dtg_DanhSachMatHang.Rows[i].Cells[1].Value.ToString();
                            ctpg.SoLuong = int.Parse(dtg_DanhSachMatHang.Rows[i].Cells[5].Value.ToString());
                            ctpg.TrangThai = 0;
                            GoiHangBUS.insertTableCTPT(ctpg);
                        }
                        MessageBox.Show("Đã thêm phiếu gởi trả hàng");
                        DANHSACHPHIEUTRA form_dspt = new DANHSACHPHIEUTRA();
                        form_dspt.ShowDialog();
                        this.Close();
                    }
                    else
                    {
                        str_chuoithongbao += "số lượng gửi trả nhiều hơn số lượng tồn, xin xem lại";
                        MessageBox.Show(str_chuoithongbao);
                    }

                }
            }
        }
        static string chuanHoaXau(string xau)
        {
            StringBuilder kq = new StringBuilder();
            xau = xau.Trim();
            for (int i = 0; i < xau.Length; i++)
            {
                kq.Append(xau[i]);
                if (xau[i] == ' ')
                {
                    while (xau[i] == ' ')
                    {
                        i++;
                    }
                    kq.Append(xau[i]);
                }
            }
            return kq.ToString();
        }
    }
}